iT邦幫忙

DAY 10
0

探索 Jenkins-CI 從認識到應用系列 第 10

10. 災復演練 - Jenkins 備份與還原

  • 分享至 

  • xImage
  •  

Jenkins 備份與還原

日常生活存在著許多不可預測的風險,系統服務也是。如同良好的保險計畫,會佔你收入的某個比例。在系統上為緊急事件處理,也應該與系統的重要性安排符合比例的預算及時間。

目前市面上尚無自動偵測綠乖乖過期的解決方案,偏偏這是主要風險因素

本篇同步發表於:http://www.gibar.co/2014/10/jenkins-thinbackup.html

本篇相關外掛

[*]thinBackup
[*]JobConfigHistory Plugin

目標情境

Jenkins 主機上的乖乖過期了,服務表示:崩潰

第一步,建立定期維修公告

此點為重要之重要。一定要先**訂定並公告固定的維護時段**,讓在Jenkins上作業的所有團隊,建立排程時參考。為求不影響作業,要去找一個沒有作業進行的時間,這答案可能是永遠沒有。

建議最好的停機時間是上班時間!例如每周四的 11:45 - 13:15

編輯描述說明,可以增添說明,只要注意如何 讓說明顯眼 就好了

只有對客戶的服務,才會選在半夜進行,像這類排程的工具,真正的尖峰期反而是夜深人靜之時;特別是午夜鐘響一過,就會有許多日結資料開始動起來了!但實際上停機不是重點,重要的是服務要確定有啟動,切記無人的自動化維護重啟計畫是很遭糕的,上班時間進行例行維護才是正確的路。你也不想在假日,擔心服務是否有啟動成功吧!

第二步,備份計畫

備份的情境有許多種情況,有的細如只希望回復前幾次的設定,有的可能慘到主機都沒了。所以我們為了建立穩定的服務,要針對這些情況分別建立不同的備份機制。

[*]設定檔歷程:有如你程式改錯,你會希望SVN調出前一次成功的版本來還原。這種要求對系統管理者來說很雞歪。但人難免會犯錯,能提供這種服務的系統,會讓人格外的安心呢,JobConfigHistory Plugin免設定,直接使用超貼心。

每個專案的組態設定,都可透過『作業設定歷史』來還原

也可以任選兩個版本,比較其中的差異

這種備份是屬於被動式的,有修改的行為觸發時,才會進行。屬系統內服務,便民措施,可以減少因為設定錯誤,而要動用人力去備份檔中找尋的浪費。

[*]定期備份 - 最小備份:Jenkins需要備份的絕大多數只有設定檔,最重要的也是設定檔,其餘的幾乎都有辦法透過線上自動安裝完成,同樣Jenkins也有簡易方便的主動備份外掛;thinBackup。我們可以密集一點的備份最小備份,但只備份重要的設定檔。或許每30分鐘就備份一次!

可以在管理Jenkins中找到 ThinBackup

設定備份目錄、排程時間、備份最大保留數,但請將左下角保持全部不勾

設定完成後,thinBackup 的排程必需要等Jenkins重啟後才會生效。但使用外掛來備份是求方便,並不是很穩當,因為當軟體出錯時,你不能強求一個出了錯的程序,還要抽空通知你,我錯了主人。這是個盲點,所以還要有一個穩當點的方式,完整備份。

[*]定期備份 - 完整備份:最小備份用的是還原時的時間,換取硬碟空間,完整備份反之。完整備份的過程需要花上一點時間及效能,所以最好的時間點,就是配合第一步的維修時間進行。這是最重要的備份內容,備份原則就是千萬不要相信軟體內建的備份功能,一定有一個備份計畫,是使用第三方的工具進行。

我們就用作業系統的 cron 排程進行,備份的位置最好是不同顆硬碟,備份的指令可以參考 https://gist.github.com/abola/05b0a2ba639a1e9e647d 拷貝或下載網址中的內容,回到主機上儲存

增加排程的指令參考如下,其中標記紅色檔案請修改成備份指令的檔案路徑,這樣就會每周四的中午12:00整固定產出一份完整備份檔。

echo "0 12 * * 4 root /bin/sh /var/lib/jenkins/JenkinsFullBackup.sh > /dev/null 2>&1" >> /etc/crontab

備份計畫總結:完整備份每周一個版本,保留四個版本,最多可還原至28天前的狀態。最小備份每30分鐘一個版本,保留336個版本(24x2x7),最多可還原至7天內任一時間點內誤差半小時。

第三步,災復演練


如上圖示,完整備份與最小備份共同配合,利用完整備份快速還原系統已下載的各套件檔案,再利用最小備份更新設定檔,至崩潰前的最後一個版本。這就是我們的計畫,開始演練!

[*]安裝空白Jenkins
這步再簡單不過了,請參考[ 無腦安裝Jenkins ] ,安裝一個空白的Jenkins來演練

[*]回復完整備份
切換到新安裝完成的Jenkins目錄下,拷貝完整備份檔過來解壓縮,然後重開

cd /var/lib/jenkins
cp /var/backup/jenkins/jenkins-backup.2014-10-05.tar.gz ./
tar zxvf ./jenkins-backup.2014-10-05.tar.gz
rm ./jenkins-backup.2014-10-05.tar.gz
chown -R jenkins:jenkins /var/lib/jenkins
service jenkins restart

完整備份的還原過程非常快!相關套件都不必再重新下載。

[*]回復最小備份點
待Jenkins啟動後,到管理_Jenkins >> ThinBackup >> Restore_,選擇要回復的時點間即可

空談是備份最大的風險,人員流動是隱藏性風險,文件化過程,定期演練是必要。已經碰過太多太多的備份資料無法回復服務,太多太多包的乖乖就放著壞掉。隨機應變,不如有備而來

本篇是基礎篇的最後一篇了,接下來的內容,我們要開始分享一些進階的元件、及一些Jenkins常見的應用方式。首先要分享的就是Jenkins第的 1001 招,單元測試與程式覆蓋度。

下一篇:生人勿進 - 單元測試與覆蓋度

本篇同步發表於:http://www.gibar.co/2014/10/jenkins-thinbackup.html


上一篇
9. 飛鴿傳書 - 如果沒事,我們是沒有必要每天見面的
下一篇
11. 生人勿進 - 單元測試與覆蓋度
系列文
探索 Jenkins-CI 從認識到應用16
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言